package phyzik.liaison;

import java.util.Enumeration;

import javax.media.j3d.Behavior;
import javax.media.j3d.WakeupOnElapsedTime;

import obj.Barre;
import obj.Joueur;
import phyzik.solides.PhysiqueBarre;
import phyzik.solides.PhysiqueJoueur;

public class LiaisonTemporelle extends Behavior {
	private static final int DELAI = 5;
	protected PhysiqueBarre barre;
	protected float limites[];
	protected PhysiqueJoueur[] joueurs;
	protected float[] decalages;
	protected float[] decalagesLim;

	protected WakeupOnElapsedTime reveil;

	public LiaisonTemporelle(Barre barre, Joueur[] joueurs) {
		this.barre = (PhysiqueBarre) barre.getPhysique();
		this.limites = barre.limites;
		this.joueurs = new PhysiqueJoueur[joueurs.length];
		this.decalages = new float[joueurs.length];
		this.decalagesLim = new float[2];
		for (int k = 0; k < joueurs.length; k++) {
			this.joueurs[k] = (PhysiqueJoueur) joueurs[k].getPhysique();
			this.decalages[k] = this.joueurs[k].position.y;
		}
		decalagesLim[0] = limites[0];
		decalagesLim[1] = limites[1];
		reveil = new WakeupOnElapsedTime(DELAI);
	}

	@Override
	public void initialize() {
		wakeupOn(reveil);
	}

	@Override
	@SuppressWarnings("unchecked")
	public void processStimulus(Enumeration enu) {
		mettreAjour();
		wakeupOn(reveil);
	}

	public void mettreAjour() {
		limites[0] = barre.position.y + decalagesLim[0];
		limites[1] = barre.position.y + decalagesLim[1];
		for (int k = 0; k < joueurs.length; k++) {
			joueurs[k].position.x = barre.position.x;
			joueurs[k].position.y = barre.position.y + decalages[k];
			joueurs[k].position.z = barre.position.z;
			joueurs[k].orientation = barre.orientation;
		}

	}
}
